#include <bits/stdc++.h>
using namespace std;

/*
题意：我们定义，如果一个数字 >= 10
且满足"其第一位（最高位）要比其他每一位都要严格大（不能相等）"，
那么称其为"蛇形数"。请问 [L, R] 之内有多少蛇形数？

做法：
首先，运用前缀和的思想，[L, R] 之内的蛇形数 = [1, R] 之内的蛇形数 - [1, L-1]
之内的蛇形数。 因此，问题转化为：给定上限 R，求 [1, R] 之内的蛇形数有多少个？

发现蛇形数的关键在于最高位要比其他位大，换言之，决定了最高位，就决定了剩下的每一位的上限。
因此可以考虑枚举最高位。另外，为了应对 <= R 的限制，可以考虑枚举数字的长度。

假设数字的长度为 k，R 的长度为 kR：
- 情况一：如果 k < kR，那么可以忽略掉 <= R
的限制（反正你后面不管怎么选数字，整个数字都 < R）。 此时，选定了最高位（假设为
t），一共有 t^(k-1) 个蛇形数

- 情况二：如果 k == len
  - 子情况一：如果最高位 t != (R 的最高位 Hi)，因此一共有 t^(len-1) 个蛇形数
  - 子情况二：t == tR。枚举 X（我们构造的蛇形数）与 R 的第一个不同的数位在哪里，
    假设是第 i 位，那么第 i 位后面的数字就可以随便填了，一共 t^(k-i) 种可能。
    当然，这样的 i 也可能不存在，此时 R == X

记得开 long long
*/

#define ll long long

// 获取数字的位数
int getLen(ll x) {
  string s = to_string(x);
  return s.size();
}

// 获取数字的最高位
int getHigh(ll x) {
  string s = to_string(x);
  return (int)(s[0] - '0');
}

// 快速幂函数
ll pow(ll a, ll b) {
  if (b == 0)
    return 1;
  ll res = 1;
  for (ll i = 1; i <= b; ++i)
    res *= a;
  return res;
}

// 获取数字的第i位（从左到右，从1开始计数）
int getDigit(ll x, int i) {
  string s = to_string(x);
  return (int)(s[i - 1] - '0');
}

// 统计 [1, R] 之内的蛇形数个数
ll solve(ll R) {
  // 如果上限小于10，则没有蛇形数（蛇形数至少是两位数）
  if (R < 10)
    return 0;

  ll ans = 0;
  int len = getLen(R);
  int Hi = getHigh(R);

  // 情况一：数字长度小于 R 的长度
  // 这些数字肯定小于 R（因为位数少）
  for (int k = 2; k < len; ++k) {
    // 枚举最高位数字（1-9）
    for (int t = 1; t <= 9; ++t) {
      // 其他 (k-1) 位每位都可以选择 0 到 (t-1)
      ans += pow(t, k - 1);
    }
  }

  // 情况二：数字长度等于 R 的长度
  // 子情况一：最高位数字小于 R 的最高位数字
  for (int t = 1; t < Hi; ++t) {
    // 其他 (len-1) 位每位都可以选择 0 到 (t-1)
    ans += pow(t, len - 1);
  }

  // 子情况二：最高位数字等于 R 的最高位数字
  // 需要逐位比较以确保不超过 R
  bool flag = true; // 标记 R 本身是否是蛇形数

  for (int i = 2; i <= len; ++i) {
    int rDigit = getDigit(R, i);

    // 当前位可以选择的范围是 0 到 min(rDigit, Hi - 1)
    // 因为要满足两个条件：
    // 1. 不超过 R 对应位的数字
    // 2. 小于最高位数字（蛇形数的定义）
    int limit = min(rDigit, Hi - 1);

    if (limit >= 0) {
      // 当前位选择 0 到 limit 中的任意一个数字
      // 后面 (len - i) 位可以自由选择 0 到 (Hi - 1)
      ans += (limit + 1) * pow(Hi, len - i);
    }

    // 检查 R 在当前位置是否违反了蛇形数的规则
    // 如果 R 的当前位大于等于最高位，则它本身不是蛇形数
    if (rDigit >= Hi) {
      flag = false;
      break;
    }
  }

  // 如果 R 本身是蛇形数，需要额外加1
  if (flag) {
    ans += 1;
  }

  return ans;
}

int main() {
  ll L, R;
  cin >> L >> R;

  // 使用前缀和思想：[L, R] 内的蛇形数 = [1, R] 内的蛇形数 - [1, L-1] 内的蛇形数
  cout << solve(R) - solve(L - 1) << endl;

  return 0;
}